﻿/* Komplexe Aufgabenstellung:
 * Sie sollen eine Anwendung für einen Shop schreiben. Im Shop gibt es viele Artikel, die mit Id, Bezeichnung, Einkaufspreis, Gewinnsatz und Verkaufspreis gespeichert werden. Der Verkaufspreis wird dabei immer aus Einkaufspreis + Gewinn errechnet.
 *
 * Artikel, die gekauft werden, werden mit Mengenangabe in einen Warenkorb gelegt. Es sollen Artikel in den Warenkorb gelegt und wieder entfernt werden können. Ebenfalls soll es möglich sein, die Anzahl eines Artikels ändern zu können. Über den Warenkorb wird der Gesamtpreis aller sich dort befindenden Artikel ermittelt.
 *
 * Artikel im Warenkorb werden dort als Warenkorb-Items eingetragen. Ein Warenkorb-Item besteht aus dem Artikel selbst und der Anzahl. Ebenfalls soll der Gesamtpreis für diesen Artikel abgefragt werden können.
 *
 * Es ist nicht erforderlich, ein Eingabe-Menü zu basteln. Es reicht, die einzelnen Fälle über Code in der Main zu testen.
 * Wichtig für diese Übung: Beachten Sie die Prinzipien der OOP. Insbesondere die Klassenbildung und Datenkapselung / Geheimnisprinzip.
 * Ebenso sollen Sie die strikte Trennung von Funktionalität / Datenhaltung und Darstellung beachten. Heißt: Dort, wo die Daten gespeichert sind und Funktionalitäten liegen, wird KEINE Konsolenausgabe getätigt. Konsolenausgaben nur in dafür vorgesehenen eigenen Klassen oder zum Beispiel in der Main.
 * Diese Aufgabe lässt sich mit dem lösen, was wir bisher kennengelernt haben.
 * Erstellen Sie auch ein UML Klassendiagramm und gerne auch Anwendungsfall-, Sequenz- oder Aktivitätsdiagramm.
 */

using System;
using System.Text;

namespace Lösungen
{
    class Lösung_3
    {

        public static void Main(String[] args)
        {
            Console.OutputEncoding = Encoding.UTF8;

            // Drei Artikel erstellen
            new Artikel(1, "Artikel 1", 99.99, 20);
            new Artikel(2, "Artikel 2", 49.99, 25);
            new Artikel(3, "Artikel 3", 9.99, 15);

            foreach (Artikel artikel in Artikel.artikelListe)
            {
                Console.WriteLine(artikel.GetArtikelString());
            }

            Console.WriteLine();

            // Neuen Warenkorb erstellen
            Warenkorb warenkorb = new Warenkorb();

            // Artikel zum Warenkorb hinzufügen
            Hinzufügen(warenkorb, 1, 2); // Zum Hinzufügen und Entfernen habe ich hier noch zwei extra Methoden geschrieben, um in der Main doppelten Code zu vermeiden (also das If-Else mit den Ausgaben ausgelagert)

            // Warenkorb ausgeben
            Console.WriteLine(warenkorb.GetWarenkorbString());

            Hinzufügen(warenkorb, 3, 20);

            Console.WriteLine(warenkorb.GetWarenkorbString());

            // Artikel entfernen (Anzahl verringern)
            Entfernen(warenkorb, 3, 10);

            Console.WriteLine(warenkorb.GetWarenkorbString());

            // Artikel hinzufügen (Anzahl erhöhen)
            Hinzufügen(warenkorb, 3, 5);

            Console.WriteLine(warenkorb.GetWarenkorbString());

            // Artikel komplett entfernen
            Entfernen(warenkorb, 3, 20);

            Console.WriteLine(warenkorb.GetWarenkorbString());

            // Entfernten Artikel erneut hinzufügen
            Hinzufügen(warenkorb, 3, 1);

            Console.WriteLine(warenkorb.GetWarenkorbString());

            // Artikel entfernen, der nicht im Warenkorb ist
            Entfernen(warenkorb, 2, 10);

            Console.WriteLine(warenkorb.GetWarenkorbString());

            // Artikel hinzufügen, der nicht existiert
            Hinzufügen(warenkorb, 4, 1);

            Console.WriteLine(warenkorb.GetWarenkorbString());

            // Alle Artikel entfernen
            Entfernen(warenkorb, 1, 2);
            Entfernen(warenkorb, 3, 1);

            Console.WriteLine(warenkorb.GetWarenkorbString());

        }

        /**
         * Methode zum Hinzufügen von Artikeln. Konsolenausgabe entsprechend dem Ergebnis.
         */
        static void Hinzufügen(Warenkorb warenkorb, int artikelId, int anzahl)
        {
            if (warenkorb.ArtikelHinzufügen(artikelId, anzahl))
                Console.WriteLine("Hinzufügen erfolgreich!");
            else
                Console.WriteLine("Hinzufügen fehlgeschlagen!");
        }


        /**
         * Methode zum Entfernen von Artikeln. Konsolenausgabe entsprechend dem Ergebnis.
         */
        static void Entfernen(Warenkorb warenkorb, int artikelId, int anzahl)
        {
            if (warenkorb.ArtikelEntfernen(artikelId, anzahl))
                Console.WriteLine("Entfernen erfolgreich!");
            else
                Console.WriteLine("Entfernen fehlgeschlagen!");
        }

    }
}